package com.hsurosy.hsuchain.nft.datasource.sharding.id;

/**
 * 业务代码枚举类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-04 19:16
 * @Description
 * @Version: v1.0.0
 */
public enum BusinessCode {

    /**
     * 订单业务
     */
    TRADE_ORDER(10, 4),

    /**
     * 支付单业务
     */
    PAY_ORDER(11, 1),

    /**
     * 退款单业务
     */
    REFUND_ORDER(12, 1);

    /**
     * 最大代码值限制
     */
    private static final int MAX_CODE = 99;

    /**
     * 最小代码值限制
     */
    private static final int MIN_CODE = 10;

    /**
     * 业务代码值
     */
    private int code;

    /**
     * 表的数量，用于分片
     */
    private int tableCount;

    /**
     * 构造器，初始化业务代码和表数量，并进行代码值的合法性校验
     *
     * @param code 业务代码
     * @param tableCount 表数量
     * @throws UnsupportedOperationException 如果code不在合法范围内抛出异常
     */
    BusinessCode(int code, int tableCount) {
        if (code > MAX_CODE || code < MIN_CODE) {
            // 校验代码范围是否合法
            throw new UnsupportedOperationException("unsupport code : " + code);
        }
        this.code = code;
        this.tableCount = tableCount;
    }

    /**
     * 获取该业务代码对应的表数量
     *
     * @return 表的数量
     */
    public int tableCount() {
        return tableCount;
    }

    /**
     * 获取该业务代码值
     *
     * @return 业务代码
     */
    public int code() {
        return code;
    }

    /**
     * 获取业务代码的字符串形式
     *
     * @return 业务代码字符串
     */
    public String getCodeString() {
        return String.valueOf(this.code);
    }
}
